package it.controllocredito.backend.persistence.tables;

import it.controllocredito.backend.persistence.bean.Soglia;
import it.controllocredito.backend.persistence.bean.Soglia.FrequenzaEnum;
import it.controllocredito.backend.persistence.bean.Soglia.UnitaDiMisuraEnum;

import android.content.ContentValues;
import android.database.Cursor;
import android.util.Log;

public abstract class SogliaTable
{
	
	private static final String	log_class_name	= "SogliaTable";
	
	private static final String	TABLE_NAME		= "soglia";
	
	public enum Columns
	{
		SOGLIA_ID("sogliaId", 0), TIPO("tipo", 1), FREQUENZA("frequenza", 2), GIORNO_INIZIO_MESE(
				"giornoInizioMese", 3), GIORNO_INIZIO_SETTIMANA(
				"giornoInizioSettimana", 4), VALORE("valore", 5), UNITA_DI_MISURA(
				"unitaDiMisura", 6), CONFIGURATION_ID("configurationId", 7);
		
		String	name;
		int		num;
		
		private Columns(String name, int num)
		{
			this.name = name;
			this.num = num;
		}
	};
	
	public static String getName()
	{
		return TABLE_NAME;
	}
	
	// metodo per ottenere la query di creazione della tablla
	public static String getCreateQuery()
	{
		String createQuery = "CREATE TABLE IF NOT EXISTS "
				+ SogliaTable.TABLE_NAME + " (" + Columns.SOGLIA_ID.toString()
				+ " integer primary key autoincrement, "
				+ Columns.TIPO.toString() + " varchar(12) not null, "
				+ Columns.FREQUENZA.toString() + "varchar(14) not null"
				+ Columns.GIORNO_INIZIO_MESE.toString() + " integer,"
				+ Columns.GIORNO_INIZIO_SETTIMANA.toString() + "integer,"
				+ Columns.VALORE.toString() + "integer not null,"
				+ Columns.UNITA_DI_MISURA.toString() + "varchar(12) not null"
				+ Columns.CONFIGURATION_ID.toString() + "FOREIGN KEY;";
		Log.d(log_class_name, "createQuery:" + createQuery);
		return createQuery;
	}
	
	// crea una nuova riga sul db con tutti i campi
	public static ContentValues createRecord(int soglia_id, String tipo,
			String frequenza, String giorno_inizio_mese,
			String giorno_inizio_settimana, int valore)
	{
		
		ContentValues cv = new ContentValues();
		cv.put(Columns.SOGLIA_ID.toString(), soglia_id);
		cv.put(Columns.TIPO.toString(), tipo);
		cv.put(Columns.FREQUENZA.toString(), frequenza);
		if (giorno_inizio_mese != null)
		{
			cv.put(Columns.GIORNO_INIZIO_MESE.toString(), giorno_inizio_mese);
		} else if (giorno_inizio_settimana != null)
		{
			cv.put(Columns.GIORNO_INIZIO_SETTIMANA.toString(),
					giorno_inizio_settimana);
		}
		cv.put(Columns.VALORE.toString(), valore);
		return cv;
	}
	
	public static String getKeyColumn()
	{
		return Columns.SOGLIA_ID.toString();
	}
	
	public static String[] getColumns()
	{
		String[] arrayTableColumns =
		{ Columns.SOGLIA_ID.toString(), Columns.TIPO.toString(),
				Columns.FREQUENZA.toString(),
				Columns.GIORNO_INIZIO_MESE.toString(),
				Columns.GIORNO_INIZIO_SETTIMANA.toString(),
				Columns.VALORE.toString(), Columns.CONFIGURATION_ID.toString() };
		return arrayTableColumns;
	}
	
	public static Soglia getRecord(Cursor cursor)
	{
		Soglia soglia = new Soglia();
		soglia.setTipo(cursor.getString(Columns.TIPO.num));
		soglia.setFrequenza(stringToFrequenza(cursor
				.getString(Columns.FREQUENZA.num)));
		soglia.setGiornoMeseInizio(Integer.parseInt(cursor
				.getString(Columns.GIORNO_INIZIO_MESE.num)));
		soglia.setGiornoSettimanaInizio(Integer.parseInt(cursor
				.getString(Columns.GIORNO_INIZIO_SETTIMANA.num)));
		soglia.setUnitaDiMisura(stringToUnitaDiMisura(cursor
				.getString(Columns.UNITA_DI_MISURA.num)));
		soglia.setValore(Integer.parseInt(cursor.getString(Columns.VALORE.num)));
		soglia.setConfigurationId(Integer.parseInt(cursor
				.getString(Columns.CONFIGURATION_ID.num)));
		Log.d(log_class_name, "[" + soglia.getSogliaId() + "] soglia: tipo:"
				+ soglia.getTipo() + ", valore:" + soglia.getValore());
		return soglia;
	}
	
	private static FrequenzaEnum stringToFrequenza(String stringa)
	{
		FrequenzaEnum frequenzaEnum = null;
		if (stringa.equals(FrequenzaEnum.GIORNO.toString()))
		{
			frequenzaEnum = FrequenzaEnum.GIORNO;
		} else if (stringa.equals(FrequenzaEnum.ANNO.toString()))
		{
			frequenzaEnum = FrequenzaEnum.ANNO;
		} else if (stringa.equals(FrequenzaEnum.MESE))
		{
			frequenzaEnum = FrequenzaEnum.MESE;
		} else if (stringa.equals(FrequenzaEnum.SETTIMANA))
		{
			frequenzaEnum = FrequenzaEnum.SETTIMANA;
		}
		return frequenzaEnum;
	}
	
	private static UnitaDiMisuraEnum stringToUnitaDiMisura(String stringa)
	{
		UnitaDiMisuraEnum unitaDiMisuraEnum = null;
		if (stringa.equals(UnitaDiMisuraEnum.GB.toString()))
		{
			unitaDiMisuraEnum = UnitaDiMisuraEnum.GB;
		} else if (stringa.equals(UnitaDiMisuraEnum.MB.toString()))
		{
			unitaDiMisuraEnum = UnitaDiMisuraEnum.MB;
		} else if (stringa.equals(UnitaDiMisuraEnum.MINUTI))
		{
			unitaDiMisuraEnum = UnitaDiMisuraEnum.MINUTI;
		} else if (stringa.equals(UnitaDiMisuraEnum.SECONDI))
		{
			unitaDiMisuraEnum = UnitaDiMisuraEnum.SECONDI;
		} else if (stringa.equals(UnitaDiMisuraEnum.SMS))
		{
			unitaDiMisuraEnum = UnitaDiMisuraEnum.SMS;
		} else if (stringa.equals(UnitaDiMisuraEnum.ORE))
		{
			unitaDiMisuraEnum = UnitaDiMisuraEnum.ORE;
		}
		return unitaDiMisuraEnum;
	}
	
}